

#ifndef GEOMETRY_H
#define GEOMETRY_H

#include <string>

#include <boost/describe.hpp>

namespace solar
{

    enum class GeometryType
    {
        kGeometryRectangle,
        kGeometryParabolic,
        kGeometryHyperbolic,
        kGeometryElliptic,
        kGeometryBSpline,
        kGeometryMesh,

        kGeometryCylinder,
        kGeometryCylinder3D,
        kGeometryRectangle3D,

        kGeometryRefinedRectangle,
        kGeometryRefinedCylinder,
        kGeometryMultiPanel,
    };
    BOOST_DESCRIBE_ENUM(GeometryType, kGeometryRectangle, kGeometryParabolic, kGeometryHyperbolic,
                        kGeometryElliptic, kGeometryBSpline, kGeometryMesh, kGeometryCylinder,
                        kGeometryRectangle3D, kGeometryCylinder3D)

    class Geometry
    {
        public:
            virtual ~Geometry() = default;
            // 这里不必写抽象类的构造函数，会报错...不明原因

            /**
             * TODO:: to decide whether reserve functions: setPara, getPara
             */

            [[nodiscard]] virtual auto getType() const -> GeometryType = 0;

            // static auto getGeometryType(std::string str) -> int;

            //    protected:
            //        GeometryType type_;
    };
} // namespace solar
#endif // SHAPERT_H
